package reflect;

import java.lang.reflect.Method;

/**
 * Java 反射机制
 * 反射是java的动态机制,可以在程序
 */
public class ReflectDemo1 {
    public static void main(String[] args) {
    /*
        类对象 Class的实例
        在JVM中每个被加载的类都有且只有一个Class的实例与之对应.
        当我们需要使用一个类时,JVM会首先读取该类的.class(字节码)文件,读取后就会同时
        实例化一个Class的实例用来记录该类的信息(名字,构造器,方法,属性等)并与该类绑定
        反射的第一步就是获取待操作的类的类对象

     */

        //获取String的类对象
        Class cls = String.class;

        String name = cls.getName(); //获取当前类对象所表示的类的完全限定名
        System.out.println(name);

        name = cls.getSimpleName(); //仅获取类名
        System.out.println(name);

        /*
            java.lang.reflect.Method
            Method的每一个实例用于表示一个方法
         */
        Method[] methods =  cls.getMethods(); //获取当前类对象所表示的类的所有公开方法
        for(Method method : methods){
            String methodName = method.getName();
            System.out.println(methodName);
        }
        /*
            Package的每一个实例用于表示一个包
         */
        Package pack = cls.getPackage();
        System.out.println(pack.getName());//包名
    }
}
